home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Amiga Collections: Purity
/
Purity #48 (1995-06-25)(PackMAN)(DE)[WB].zip
/
Purity #48 (1995-06-25)(PackMAN)(DE)[WB].adf
/
Palette
/
Palette_OS3.p
< prev
next >
Wrap
Text File
|
1995-06-23
|
4KB
|
152 lines
PROGRAM palettedemo1;
{ Dieses Programm zeigt, wie ein Gadtools-Palettengadget programmiert
vielleicht kann mir aber jemand erklären, wie man _vor_ OS3 an die
aktuelle angeklickte Farbe kommt!}
USES gadtools;
VAR win : p_window;
t : Array[1..15] OF TagItem;
di : p_drawinfo;
vi : PTR;
msg : p_intuimessage;
ng : newgadget;
gads : ARRAY[1..8] OF p_gadget;
glist : p_gadget;
pgad : p_gadget;
aktgad: p_gadget;
ok : BOOLEAN;
pscr : p_screen;
success : BOOLEAN;
i : INTEGER;
ende : BOOLEAN;
farbanzahl : LONG; { Anzahl der Farben }
hilf : STRING;
num : INTEGER; { aktuelle Farbnummer }
FUNCTION OS(version:BYTE):BOOLEAN
VAR lib:p_library;
BEGIN
lib:=intuitionbase;
os:=(lib^.lib_version>=version);
END;
PROCEDURE farbanzahl_holen;
TYPE p_long=^long;
VAR plong:p_long;
BEGIN
{ die Farbanzahl aus den Bitplanes berechnen. n Bitplanes = 2^n Farben}
farbanzahl:=1;
FOR i:=1 TO di^.dri_depth DO farbanzahl:=farbanzahl*2;
hilf:='Planes: '+intstr(i)+' Farbanzahl: '+intstr(farbanzahl);
IF OS(39) THEN
BEGIN
t[1].ti_tag:=GTPA_Color; { aktuelle Farbe abfragen }
t[2].ti_tag:=TAG_DONE;
i:=GT_GetGadgetAttrsA(gads[1],win,NIL,^t);
plong:=p_long(t[1].ti_data); { ti_data ist immer eine Adresse einer Langwort- }
num:=plong^; { variable deswegen wandeln }
hilf:=hilf+' Aktuelle Farbnummer: '+intstr(num);
END;
setwindowtitles(win,hilf,PTR(-1));
END;
PROCEDURE tastendruck;
TYPE p_long=^long;
VAR plong:p_long; { zum wandeln von ti_data }
BEGIN
IF OS(39) THEN
BEGIN
farbanzahl:=1;
FOR i:=1 TO di^.dri_depth DO farbanzahl:=farbanzahl*2; {farbanzahl berechnen}
t[1].ti_tag:=GTPA_Color;
t[2].ti_tag:=TAG_DONE;
i:=GT_GetGadgetAttrsA(gads[1],win,NIL,^t);
plong:=p_long(t[1].ti_data);
num:=plong^;
IF num<farbanzahl-1 THEN inc(num) ELSE num:=0;
t[1]:=tagItem(GT_underscore,ORD('_'));
t[2]:=TagItem(GTPA_depth,di^.dri_depth);
t[3]:=TagItem(GTPA_Indicatorheight,30);
t[4]:=TagItem(GTPA_Indicatorwidth,30);
t[5]:=TagItem(GTPA_Color,num);
t[6].ti_tag:=Tag_Done;
GT_SetGadgetAttrsA(gads[1],win,NIL,^t);
END;
farbanzahl_holen;
END;
PROCEDURE oberflaeche;
BEGIN
t[1]:=tagItem(GT_underscore,ORD('_'));
t[2]:=TagItem(GTPA_depth,di^.dri_depth); { Anzahl der Bitplanes }
t[3]:=TagItem(GTPA_Indicatorheight,30); { Höhe+Breite des Indicatorfeldes,}
t[4]:=TagItem(GTPA_Indicatorwidth,30); { welches die Farbe anzeigt. Ab OS3.0 egal}
t[5]:=TagItem(GTPA_Color,0); { Aktuelle Farbe }
t[6].ti_tag:=Tag_Done;
ng:=newgadget(100,35,200,150,'_Palette',NIL,1,Placetext_left,vi,NIL);
gads[1]:=CreateGadgetA(PALETTE_KIND,pgad,^ng,^t);
t[1]:=TagItem(WA_InnerWidth,400);
t[2]:=TagItem(WA_InnerHeight,180);
t[3].ti_Tag:=WA_Title;
t[3].ti_data:='PALETTE_KIND DEMO 15.06.1995 by RøgerSøft';
t[4]:=TagItem(WA_Idcmp,IDCMP_CLOSEWINDOW+IDCMP_GADGETUP+IDCMP_RAWKEY);
t[5]:=TagItem(WA_Flags,WFLG_CLOSEGADGET+WFLG_DRAGBAR+WFLG_ACTIVATE+
WFLG_DEPTHGADGET+WFLG_SMART_REFRESH+WFLG_NOCAREREFRESH);
t[6]:=TagItem(WA_Left,75);
t[7]:=TagItem(WA_Top,30);
t[8]:=TagItem(WA_Gadgets,LONG(glist));
t[9].ti_Tag:=TAG_DONE;
win:=OpenWindowTaglist(NIL,^t);
IF win=NIL THEN exit;
GT_Refreshwindow(Win,NIL);
END;
BEGIN
ende:=FALSE;
pscr:=lockpubScreen('Workbench');
di:=NIL;
di:=getscreendrawinfo(pscr);
IF (di=NIL) THEN exit;
freescreendrawinfo(pscr,di);
vi:=NIL;
vi:=GetVisualInfoA(pscr,NIL);
unLockPubScreen(NIL,pscr);
Glist:=NIL;
pgad:=CreateContext(^Glist);
IF (pgad=NIL) OR (vi=NIL) THEN exit;
oberflaeche;
REPEAT
msg:=Wait_Port(win^.UserPort);
msg:=GT_getImsg(win^.userport);
GT_ReplyImsg(msg);
CASE msg^.Class OF
IDCMP_GadgetUP:
BEGIN
aktgad:=msg^.iaddress;
CASE aktgad^.gadgetID OF
1:farbanzahl_holen;
ELSE END;
END;
IDCMP_RAWKEY:
BEGIN
CASE msg^.code OF
25:tastendruck ; {code p}
ELSE END;
END;
IDCMP_CLOSEWINDOW: ende:=TRUE;
ELSE END; {OF CASE }
UNTIL ende;
Closewindow(win);
Freegadgets(glist);
Freevisualinfo(vi);
END.